#include "TrngInitHelper.h"
#include "main.h"

#include <string.h>

uint32_t trng_buf[2];
uint8_t trng_data[8];
uint8_t trng_index = 0;
char trng_build_buf[2];
char trng_str16[16];
char trng_str[128];

void Trng_Init(void) {
  /* Enable TRNG. */
  FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_TRNG, ENABLE);
  /* TRNG initialization configuration. */
  TRNG_Init(TRNG_SHIFT_CNT256, TRNG_RELOAD_INIT_VAL_ENABLE);
}

void TRNG_IrqCallback(void) {
  (void) TRNG_GetRandom(trng_buf, 2U);

//  trng_data[0] = trng_buf[0] % 0x100;
//  trng_data[1] = (trng_buf[0] >> 8) % 0x100;
//  trng_data[2] = (trng_buf[0] >> 16) % 0x100;
//  trng_data[3] = (trng_buf[0] >> 24) % 0x100;
//  trng_data[4] = trng_buf[1] % 0x100;
//  trng_data[5] = (trng_buf[1] >> 8) % 0x100;
//  trng_data[6] = (trng_buf[1] >> 16) % 0x100;
//  trng_data[7] = (trng_buf[1] >> 24) % 0x100;
	memcpy(trng_data, (uint8_t*)(trng_buf), 4);
	memcpy(trng_data+4, (uint8_t*)(trng_buf+1), 4);

//  rt_sprintf(trng_str16, "%02X%02X%02X%02X%02X%02X%02X%02X", trng_data[0], trng_data[1], trng_data[2], trng_data[3],
//          trng_data[4], trng_data[5], trng_data[6], trng_data[7]);
	for (int index=0; index<8; index++){
		uint8ToHexString(trng_data[index], trng_build_buf);
		memcpy(trng_str16 + index*2, trng_build_buf, 2);
	}
	
  rt_memcpy(trng_str+trng_index, trng_str16, 16);
	trng_index += 16;
	if (trng_index == 128){ trng_index = 0; }

  //ULOG_DEBUG("get trng16: %s\n", trng_str16);
}
